# uncompyle6 version 3.2.3
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.8 |Anaconda custom (64-bit)| (default, Feb 21 2019, 18:30:04) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: site-packages\psycopg2\__init__.py
"""A Python driver for PostgreSQL

psycopg is a PostgreSQL_ database adapter for the Python_ programming
language. This is version 2, a complete rewrite of the original code to
provide new-style classes for connection and cursor objects and other sweet
candies. Like the original, psycopg 2 was written with the aim of being very
small and fast, and stable as a rock.

Homepage: http://initd.org/projects/psycopg2

.. _PostgreSQL: http://www.postgresql.org/
.. _Python: http://www.python.org/

:Groups:
  * `Connections creation`: connect
  * `Value objects constructors`: Binary, Date, DateFromTicks, Time,
    TimeFromTicks, Timestamp, TimestampFromTicks
"""
from psycopg2._psycopg import (
    BINARY,
    NUMBER,
    STRING,
    DATETIME,
    ROWID,
    Binary,
    Date,
    Time,
    Timestamp,
    DateFromTicks,
    TimeFromTicks,
    TimestampFromTicks,
    Error,
    Warning,
    DataError,
    DatabaseError,
    ProgrammingError,
    IntegrityError,
    InterfaceError,
    InternalError,
    NotSupportedError,
    OperationalError,
    _connect,
    apilevel,
    threadsafety,
    paramstyle,
    __version__,
    __libpq_version__,
)
from psycopg2 import tz
from psycopg2 import extensions as _ext

_ext.register_adapter(tuple, _ext.SQL_IN)
_ext.register_adapter(type(None), _ext.NoneAdapter)
try:
    from decimal import Decimal
except ImportError:
    pass
else:
    from psycopg2._psycopg import Decimal as Adapter

    _ext.register_adapter(Decimal, Adapter)
    del Decimal
    del Adapter


def connect(dsn=None, connection_factory=None, cursor_factory=None, **kwargs):
    """
    Create a new database connection.
    
    The connection parameters can be specified as a string:
    
        conn = psycopg2.connect("dbname=test user=postgres password=secret")
    
    or using a set of keyword arguments:
    
        conn = psycopg2.connect(database="test", user="postgres", password="secret")
    
    Or as a mix of both. The basic connection parameters are:
    
    - *dbname*: the database name
    - *database*: the database name (only as keyword argument)
    - *user*: user name used to authenticate
    - *password*: password used to authenticate
    - *host*: database host address (defaults to UNIX socket if not provided)
    - *port*: connection port number (defaults to 5432 if not provided)
    
    Using the *connection_factory* parameter a different class or connections
    factory can be specified. It should be a callable object taking a dsn
    argument.
    
    Using the *cursor_factory* parameter, a new default cursor factory will be
    used by cursor().
    
    Using *async*=True an asynchronous connection will be created. *async_* is
    a valid alias (for Python versions where ``async`` is a keyword).
    
    Any other keyword parameter will be passed to the underlying client
    library: the list of supported parameters depends on the library version.
    
    """
    kwasync = {}
    if "async" in kwargs:
        kwasync["async"] = kwargs.pop("async")
    if "async_" in kwargs:
        kwasync["async_"] = kwargs.pop("async_")
    if dsn is None:
        if not kwargs:
            raise TypeError("missing dsn and no parameters")
    dsn = _ext.make_dsn(dsn, **kwargs)
    conn = _connect(connection_factory=connection_factory, **kwasync)
    if cursor_factory is not None:
        conn.cursor_factory = cursor_factory
    return conn
